import {Utils} from "../../utils/Utils.js";

/**
 * @description 基础对象基类
 * @class {BaseObject}
 * @author hhx
 * @date 2024-11-19 11:11
 * @version 0.1.2
 */
export class BaseObject {

    /**
     * @description 私有成员
     * @private
     * @type {Map}
     */
    _properties = null

    /**
     * @description 基础对象类构造函数
     * @public
     * @constructor
     * @param prop {object} 配置对象
     */
    constructor(prop) {

        this.init(prop)

    }

    //========================== 内部成员 ==========================

    /**
     * @description 获取 成员属性
     * @properties
     * @protected
     * @return {Map}
     */
    get properties() {
        return this._properties;
    }

    /**
     * @description 设置 成员属性
     * @properties
     * @protected
     * @param value {Map}
     */
    set properties(value) {
        this._properties = value;
    }

    //========================== 成员方法 ==========================

    //========================== 内部属性 ==========================

    //========================== 属性方法 ==========================

    //========================== 接口方法 ==========================

    getproperties() {
        return this.properties;
    }

    setproperties(value) {
        this.properties = value;
    }


    //========================== 内部方法 ==========================

    /**
     * @description 判断是否是对象
     * @public
     * @param prop {*}
     * @return {boolean} true 是 false 否
     */
    isObject(prop) {
        return Utils.isObject(prop);
    }

    //========================== 创建方法 ==========================

    /**
     * @description 初始化方法
     * @public
     * @protected
     * @param prop {*}
     */
    init(prop) {
        if (this.isObject(prop)) {
            this.initProp(prop);

        }

    }

    /**
     * @description 初始化方法
     * @public
     * @protected
     * @param prop {*} 初始化参数
     */
    initProp(prop) {

        this.properties = new Map();
        for (const propKey in prop) {
            this.properties.set(propKey, prop[propKey]);
        }
    }

}